home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1999 March / EnigmA AMIGA RUN 35 (1999)(G.R. Edizioni)(IT)[!][issue 1999-03].iso / earcd / -archivi / -recent2 / chunky_dev.lha / chunky_dev / Demos / Effects / Effects.c next >
C/C++ Source or Header  |  1999-03-18  |  5KB  |  222 lines

  1. //
  2. // chunky.library demo
  3. //
  4. // This example fiddles  around with CHK_Rotate(), CHK_Scale() and
  5. // CHK_Scroll().
  6. //
  7. // (c) 1999 Rosande Limited, all rights reserved.
  8. // PUBLIC DOMAIN
  9. //
  10. // http://www.irrelevant.org/~oondy/chunky/
  11.  
  12. #include <exec/types.h>
  13. #include <exec/libraries.h>
  14. #include <clib/chunky_protos.h>
  15. #include <libraries/chunky.h>
  16. #include <pragma/chunky_lib.h>
  17. #include <intuition/intuition.h>
  18. #include <pragma/intuition_lib.h>
  19. #include <pragma/graphics_lib.h>
  20. #include <pragma/exec_lib.h>
  21. #include <pragma/dos_lib.h>
  22. #include <string.h>
  23. #include <stdlib.h>
  24. #include <stdio.h>
  25.  
  26. #include "/_shared/loadcp.h"
  27. #include "/_shared/screen.h"
  28. #include "/_shared/waitbutton.h"
  29. #include "/_shared/requester.h"
  30. #include "/_shared/text.h"
  31.  
  32. struct Library *ChunkyBase;
  33. void *Colours = NULL;
  34. UBYTE *Bart = NULL;
  35. struct ChunkyPort *BartCP = NULL;
  36.  
  37. #define BART_WIDTH  139
  38. #define BART_HEIGHT 232
  39.  
  40. void DoDemo(void);
  41.  
  42. main()
  43. {
  44.   if(ChunkyBase = OpenLibrary("chunky.library", 4))
  45.   {
  46.     // Open the screen
  47.     if(Colours = DEMO_LoadRGB32("/_shared/bart.col"))
  48.     {
  49.       if(DEMO_OpenScreen(640, 480, NULL, Colours))
  50.       {
  51.         CHK_ChooseHardwareMode(GetVPModeID(&DemoScreen->ViewPort));
  52.         if(Bart = DEMO_LoadChunky("/_shared/bart.chk", BART_WIDTH,
  53.          BART_HEIGHT))
  54.         {
  55.           if(BartCP = CHK_InitChunky(BART_WIDTH, BART_HEIGHT))
  56.           {
  57.             CopyMem(Bart, BartCP->cp_Chunky, BART_WIDTH*BART_HEIGHT);
  58.             DoDemo();
  59.           }
  60.           else printf("no bartcp mem\n");
  61.         }
  62.         else printf("No bart.chk\n");
  63.       }
  64.       else printf("No memory for screen\n");
  65.     }
  66.     else printf("No bart.col\n");
  67.     CloseLibrary(ChunkyBase);
  68.   }
  69.   else printf("No chunky.library v4\n");
  70.  
  71.   if(BartCP) CHK_FreeChunky(BartCP);
  72.   if(Bart) DEMO_FreeChunky(Bart);
  73.   if(DemoScreen) DEMO_CloseScreen();
  74.   if(Colours) DEMO_FreeRGB32(Colours);
  75. }
  76.  
  77. BOOL DoFlipDemo(void)
  78. {
  79.   struct ChunkyPort *cp;
  80.   char s[] = "Click close button to continue...\0";
  81.   BOOL ok = FALSE;
  82.   // Clone the ChunkyPort
  83.  
  84.   if(cp = CHK_CloneChunkyPort(BartCP))
  85.   {
  86.     // Right, show the normal image
  87.     DEMO_WriteText("Normal Image", 16, 16);
  88.     CHK_DrawChunky(cp, DemoWindow->RPort, 8, 26);
  89.  
  90.     // Flip it horizontally
  91.     CHK_FlipChunkyPort(cp, CHKFLIP_HORIZ);
  92.     DEMO_WriteText("CHKFLIP_HORIZ", 300, 16);
  93.     CHK_DrawChunky(cp, DemoWindow->RPort, 300, 26);
  94.     DEMO_WriteText(s, 16, 300);
  95.     DEMO_WaitForCloseGadget();
  96.  
  97.     // Flip it vertically
  98.     CHK_SetDrMd(cp, JAM2);
  99.     CHK_DrawChunkyChunky(cp, BartCP, 0, 0);
  100.     CHK_FlipChunkyPort(cp, CHKFLIP_VERT);
  101.     DEMO_WriteText("CHKFLIP_VERT  ", 300, 16);
  102.     CHK_DrawChunky(cp, DemoWindow->RPort, 300, 26);
  103.     DEMO_WriteText(s, 16, 300);
  104.     DEMO_WaitForCloseGadget();
  105.  
  106.     // Flip it both ways
  107.     CHK_DrawChunkyChunky(cp, BartCP, 0, 0);
  108.     CHK_FlipChunkyPort(cp, CHKFLIP_BOTH);
  109.     DEMO_WriteText("CHKFLIP_BOTH", 300, 16);
  110.     CHK_DrawChunky(cp, DemoWindow->RPort, 300, 26);
  111.     DEMO_WriteText(s, 16, 300);
  112.     DEMO_WaitForCloseGadget();
  113.  
  114.     CHK_FreeChunky(cp); ok  = TRUE;
  115.   }
  116.   else
  117.   {
  118.     printf("No mem for CHK_CloneChunkyPort()\n");
  119.   }
  120.   return(ok);
  121. }
  122.  
  123. BOOL DoScrollDemo(void)
  124. {
  125.   struct ChunkyPort *cp = NULL;
  126.   int i, w, h;
  127.   BOOL ok = FALSE;
  128.  
  129.   if(cp = CHK_CloneChunkyPort(BartCP))
  130.   {
  131.     w = cp->cp_Width-1; h = cp->cp_Height-1;
  132.     if(CHK_BeginScroll(cp, 0, 0, w, h))
  133.     {
  134.       //  Cool, scroll!
  135. //      CHK_SetDrMd(cp, JAM2);
  136.       CHK_DrawChunky(cp, DemoWindow->RPort, 200, 100);
  137.  
  138.       for(i = 0; i < 25; i++)
  139.       {
  140.         if(!CHK_Scroll(cp, 1, 0, 0, 0, w, h))
  141.         {
  142.           printf("CHK_Scroll() failed\n"); return(FALSE)
  143.         }
  144.         CHK_DrawChunky(cp, DemoWindow->RPort, 200, 100);
  145.       }
  146.  
  147.       // Easy :)
  148.       ok = TRUE;
  149.       CHK_EndScroll(cp);
  150.     }
  151.     else printf("No mem for scroll buffer\n");
  152.   }
  153.   else printf("No mem  for cloning\n");
  154.   if(cp) CHK_FreeChunky(cp);
  155.   return(ok);
  156. }
  157.  
  158. BOOL DoScaleDemo(void)
  159. {
  160.   struct  ChunkyPort *cp = NULL, *cp2 = NULL;
  161.   char with[] = "Scaling with smoothing...\0";
  162.   char without[] = "Scaling with no smoothing...\0";
  163.   BOOL ok =  FALSE;
  164.  
  165.   DEMO_StatusText(NULL);
  166.   DEMO_Request("Doubling the size of Bart...", NULL, NULL);
  167.  
  168. /*
  169.   DEMO_StatusText(with);
  170.   if(cp2 = CHK_CloneChunkyPort(BartCP))
  171.   {
  172.     if(cp = CHK_Scale(cp2, BART_WIDTH*2, BART_HEIGHT*2))
  173.     {
  174.       // Cool
  175.       DEMO_StatusText(NULL);
  176.       CHK_DrawChunky(cp, DemoWindow->RPort, 20, 10);
  177.       DEMO_Request("Argh!  Giant Bart!", "Argh!", NULL);
  178.  
  179.       CHK_FreeChunky(cp); cp = NULL; cp2 = NULL;
  180.     }
  181.     else printf("No mem for doublescale\n");
  182.     if(cp2) CHK_FreeChunky(cp2);
  183.     cp2 = NULL;
  184.   }
  185.   else printf("No mem for clone\n");
  186. */
  187.  
  188.   DEMO_StatusText(without);
  189.   if(cp = CHK_CloneChunkyPort(BartCP))
  190.   {
  191.     if(CHK_SimpleScale(cp, BART_WIDTH*2, BART_HEIGHT*2))
  192.     {
  193.       // Cool
  194.       DEMO_StatusText(NULL);
  195.       CHK_DrawChunky(cp, DemoWindow->RPort, 20, 10);
  196.       DEMO_Request("Argh!  Giant Bart with no smoothing!!", "Argh!", NULL);
  197.       ok = TRUE;
  198.     }
  199.     else printf("No mem for doublescale\n");
  200.     CHK_FreeChunky(cp);
  201.   }
  202.   else printf("No mem for clone\n");
  203.   return(ok);
  204. }
  205.  
  206. void DoDemo(void)
  207. {
  208.   DEMO_Request("Flip that Bart!", "Wow!", NULL);
  209.  
  210.   if(!DoFlipDemo()) return;
  211.  
  212.   DEMO_Request("Scroll that Bart!", "Yeh!", NULL);
  213.  
  214.   if(!DoScrollDemo()) return;
  215.  
  216.   DEMO_Request("Scale that Bart!", "Bet that's painful!", NULL);
  217.  
  218.   if(!DoScaleDemo())  return;
  219.  
  220.   DEMO_Request("Neat library isn't it :)", "Fantastic!", NULL);
  221. }
  222.